/*
 Práctica 1 asignatura Desarrollo Aplicaciones Móviles

    -Informática-

Integrantes:  Esperanza González de la Mora & Félix López Garcinuño & José Miguel Bilbao Navas
 */

package miCartera;

import capa_interfaz.splash.CanvasSplash;//importamos para SplashScreen
import capa_dominio.ControladorInterfaz;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class MiCartera extends MIDlet implements CommandListener{
    public Display pantalla;
    public Form pantallainicial; //Creo la pantalla inicial en forma de Form para extenderlo posteriormente con las opciones
    private Command salir, anadir, editar, ranking_fechas,ranking_gasto, ver_monedas, borrar;
    private Ticker tick;
    private ChoiceGroup misGastosCartera;
    public ControladorInterfaz contrInterfaz;//Delego las funciones a un controlador del dominio para desacoplar
    public String monedaReferencia="EUR";//Las siglas de la moneda de referencia, por defecto el Euro
    private Display display; //Objetos SplashScreen
    private CanvasSplash splashScreen;//SplashScreen

    public MiCartera(){
       //Obtengo la referencia a la pantalla del MIDlet
        pantalla=Display.getDisplay(this);
        
        //Creo los objetos
        salir=new Command("Salir",Command.EXIT,1);
        anadir=new Command("Añadir",Command.SCREEN,1);
        editar=new Command("Editar",Command.SCREEN,1);
        ranking_fechas=new Command("Ranking por fechas",Command.SCREEN,1);
        ranking_gasto=new Command("Ranking por gasto",Command.SCREEN,1);
        ver_monedas=new Command("Ver monedas",Command.SCREEN,1);
        borrar=new Command("Borrar todos gastos",Command.SCREEN,1);
        misGastosCartera= new ChoiceGroup("Mis gastos",ChoiceGroup.EXCLUSIVE);
        contrInterfaz=new ControladorInterfaz(this);
        
        //Creo la pantalla principal del MIDlet
        pantallainicial=new Form("Mi Cartera");
        
        //Inserto objetos en la pantalla
        pantallainicial.addCommand(salir);
        pantallainicial.addCommand(anadir);
        pantallainicial.addCommand(editar);
        pantallainicial.addCommand(ranking_fechas);
        pantallainicial.addCommand(ranking_gasto);
        pantallainicial.addCommand(borrar);
        pantallainicial.addCommand(ver_monedas);      
        
        pantallainicial.setCommandListener(this);
    }
    public void startApp() {
        //Iniciamos SplashScreen mientras cargamos los datos
        display = Display.getDisplay(this);
        splashScreen = new CanvasSplash(display,pantallainicial); //Le pasamos pantalla y form que queremos cargar después
        splashScreen.start();
        display.setCurrent(splashScreen);

         //Metemos gastos iniciales
//        contrInterfaz.meterRegistrosGastos();

        //Metemos monedas iniciales
        contrInterfaz.meterRegistrosMonedas();

        //Metemos descripcion de monedas
        contrInterfaz.meterListaDescripcionMonedas();

        //Añado la lista de mis gastos
        contrInterfaz.extraerGastos();

        //Veo el total de los gastos
        tick=new Ticker("Mi cartera tiene un total de: "+ String.valueOf(contrInterfaz.calculaTotalGasto(monedaReferencia))+" "+monedaReferencia);
        pantallainicial.setTicker(tick);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c,Displayable d){
        if (c==salir){
            destroyApp(false);//parametro incondicional false para lanzar excepción si no puede ser destruido
            notifyDestroyed();
        }
        else if (c==anadir){
            contrInterfaz.anadeGasto();
        }
        else if (c==editar){
            int s=misGastosCartera.getSelectedIndex();
            contrInterfaz.editarGasto(misGastosCartera.getString(s));

        }
        else if (c==ranking_fechas){
            contrInterfaz.haceRankingFechas();

        }
         else if(c==ranking_gasto){
            contrInterfaz.haceRankingGastos();
        }
        else if (c==ver_monedas){
            contrInterfaz.muestraMonedas();

        }        
        else if (c==borrar){
            contrInterfaz.borrarGastos();
        }
        else{
            pantalla.setCurrent(pantallainicial);

        }
     }
           
    public void anadeStringItem(String etiqueta, String cadena, int tipo){
        StringItem auxstringitem;
        auxstringitem=new StringItem(etiqueta,"\n"+cadena,tipo);
        pantallainicial.append(auxstringitem);
    }

    public void anadeFilaChoiceGroup (String cadena){
        misGastosCartera.append(cadena,null);
    }
    
    public void anadeChoiceGroup (){
        System.out.println("Elementos del Form de pantallainicial:"+pantallainicial.size());
        if(pantallainicial.size()==0){//Si no se ha añadido ninguna vez ChoiceGrop al formulario
            System.out.println("Tamaño ChoiceGroup:"+misGastosCartera.size());
            pantallainicial.append(misGastosCartera);
            System.out.println("Devuelve item que se encuentra en la posicio0:"+pantallainicial.get(0));
        }else{
            if (pantallainicial.size()==2){//si hay dos items significa que está misGastosCartera e itemstring
                 pantallainicial.delete(1);//borra itemstring
            }
        }
    }

    public void borraGastosChoiceGroup(){
        misGastosCartera.deleteAll();
    }

    public void actualizaGastos(){
        borraGastosChoiceGroup();
        contrInterfaz.extraerGastos();
        //Renuevo el total de los gastos
        tick=new Ticker("Mi cartera tiene un total de: "+ String.valueOf(contrInterfaz.calculaTotalGasto(monedaReferencia))+" "+monedaReferencia);
        pantallainicial.setTicker(tick);
    }
}
